package com.jiashihui.schema_lgorithm.schema.singleton;

/**
 * @author jiashihui
 * @describe: 单例模式（单线程-懒汉式【多线程，效率低】）-双重判断【可行】）
 * @date 2019/02/21
 */
public class Singleton {
    private volatile static Singleton singleton = null;

    private Singleton (){
    }

    // 加同步锁 前后两次判断实例是否存在（双重判断）
    public static Singleton getInstance(){
        if(singleton == null){
            synchronized (Singleton.class){
                if(singleton == null){
                    return new Singleton();
                }
            }
        }
        return singleton;
    }

    // 懒汉式 频繁加锁耗时
//    public static synchronized Singleton getInstance(){
//        if(singleton == null){
//            return new Singleton();
//        } else {
//            return singleton;
//        }
//    }

    // 只在单线程下使用
//    public static Singleton getInstance(){
//        if(singleton == null){
//            return new Singleton();
//        } else {
//            return singleton;
//        }
//    }
}
